<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>监视属性</title>
    <!--引入Vue-->
    <script type="text/javascript" src="./js/vue.js"></script>
</head>

<body>

    <div id="root">
        <!--data里没有的属性，要用插值语法，一般用计算属性-->
        <!--插值语法返回表表达式，-->
        <P>今天下去很{{info}}</P>
        <!--指令语法可以执行简单的语句-->
        <!-- <button @click="total=!total">切换天气</button> -->
        <button @click="changeState">切换天气</button>
    </div>
    <script>
        //总结:
        //监视属性watch:
        //1.当被监视的属性变化时，回调函数自动调用，
        //2.监视的属性必须存在，才能进行监视
        //3.监视的两种写法:
        // (1)new Vue时传入watch配置
        //（2）通过vm.$watch监视
        const vm = new Vue({ 
            el: '#root',
            data: {
                total: true
            },
            computed: {
                info: function() {
                    return this.total ? "炎热" : "晾爽"
                }
            },
            methods: {
                changeState() {
                    //  console.log(this)
                    this.total = !this.total
                }

            },

            //监视属性的第一种写法
            watch: { //监视属性(和计算属性写法一样):用来监视属性的变化
                //监视属性total
                total: {
                    immediate: true, //页面加载初始化时让hander调用一下（可以不加）
                    //handler()当监视的属性发生改变时调用
                    //handler(newValue，oldValue)有两个参数，newValue，属性被改变新的值，oldValue属性改变旧的值
                    handler(newValue, oldValue) {
                        console.log("total被修改了")
                        console.log(newValue)
                        console.log(oldValue)
                    }
                }

            }

        })

        //监视属性的第二种写法:
        // vm.$watch('total', {
        //     immediate: true, //页面加载初始化时让hander调用一下（可以不加）
        //     //handler()当监视的属性发生改变时调用
        //     //handler(newValue，oldValue)有两个参数，newValue，属性被改变新的值，oldValue属性改变旧的值
        //     handler(newValue, oldValue) {
        //         console.log("total被修改了")
        //         console.log(newValue)
        //         console.log(oldValue)
        //     }
        // })
    </script>


</body>

</html>